{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "aed66040",
   "metadata": {},
   "source": [
    "# Optional Lab: Logistic Regression\n",
    "\n",
    "In this ungraded lab, you will \n",
    "- explore the sigmoid function (also known as the logistic function)\n",
    "- explore logistic regression; which uses the sigmoid function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ae7996d4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:14.921532Z",
     "start_time": "2022-06-17T10:47:13.169798Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "%matplotlib widget\n",
    "import matplotlib.pyplot as plt\n",
    "from plt_one_addpt_onclick import plt_one_addpt_onclick\n",
    "from lab_utils_common import draw_vthresh\n",
    "plt.style.use('./deeplearning.mplstyle')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd40521b",
   "metadata": {},
   "source": [
    "## Sigmoid or Logistic Function\n",
    "<img align=\"left\" src=\"../work/images/C1_W3_LogisticRegression_left.png\"     style=\" width:300px; padding: 10px; \" >As discussed in the lecture videos, for a classification task, we can start by using our linear regression model, $f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) = \\mathbf{w} \\cdot  \\mathbf{x}^{(i)} + b$, to predict $y$ given $x$. \n",
    "- However, we would like the predictions of our classification model to be between 0 and 1 since our output variable $y$ is either 0 or 1. \n",
    "- This can be accomplished by using a \"sigmoid function\" which maps all input values to values between 0 and 1. \n",
    "\n",
    "\n",
    "Let's implement the sigmoid function and see this for ourselves.\n",
    "\n",
    "## Formula for Sigmoid function\n",
    "\n",
    "The formula for a sigmoid function is as follows -  \n",
    "\n",
    "$g(z) = \\frac{1}{1+e^{-z}}\\tag{1}$\n",
    "\n",
    "In the case of logistic regression, z (the input to the sigmoid function), is the output of a linear regression model. \n",
    "- In the case of a single example, $z$ is scalar.\n",
    "- in the case of multiple examples, $z$ may be a vector consisting of $m$ values, one for each example. \n",
    "- The implementation of the sigmoid function should cover both of these potential input formats.\n",
    "Let's implement this in Python."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "845fc608",
   "metadata": {},
   "source": [
    "NumPy has a function called [`exp()`](https://numpy.org/doc/stable/reference/generated/numpy.exp.html), which offers a convenient way to calculate the exponential ( $e^{z}$) of all elements in the input array (`z`).\n",
    " \n",
    "It also works with a single number as an input, as shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "96b3b663",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:14.953522Z",
     "start_time": "2022-06-17T10:47:14.926518Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Input to exp: [1 2 3]\n",
      "Output of exp: [ 2.718  7.389 20.086]\n",
      "Input to exp: 1\n",
      "Output of exp: 2.718281828459045\n"
     ]
    }
   ],
   "source": [
    "# Input is an array. \n",
    "input_array = np.array([1,2,3])\n",
    "exp_array = np.exp(input_array)\n",
    "\n",
    "print(\"Input to exp:\", input_array)\n",
    "print(\"Output of exp:\", exp_array)\n",
    "\n",
    "# Input is a single number\n",
    "input_val = 1  \n",
    "exp_val = np.exp(input_val)\n",
    "\n",
    "print(\"Input to exp:\", input_val)\n",
    "print(\"Output of exp:\", exp_val)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77e89907",
   "metadata": {},
   "source": [
    "The `sigmoid` function is implemented in python as shown in the cell below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "aa4adcbb",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:14.969542Z",
     "start_time": "2022-06-17T10:47:14.958526Z"
    }
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    \"\"\"\n",
    "    Compute the sigmoid of z\n",
    "\n",
    "    Args:\n",
    "        z (ndarray): A scalar, numpy array of any size.\n",
    "\n",
    "    Returns:\n",
    "        g (ndarray): sigmoid(z), with the same shape as z\n",
    "         \n",
    "    \"\"\"\n",
    "\n",
    "    g = 1/(1+np.exp(-z))\n",
    "   \n",
    "    return g"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "80814772",
   "metadata": {},
   "source": [
    "Let's see what the output of this function is for various value of `z`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c30410da",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:14.985532Z",
     "start_time": "2022-06-17T10:47:14.972527Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Input (z), Output (sigmoid(z))\n",
      "[[-1.000e+01  4.540e-05]\n",
      " [-9.000e+00  1.234e-04]\n",
      " [-8.000e+00  3.354e-04]\n",
      " [-7.000e+00  9.111e-04]\n",
      " [-6.000e+00  2.473e-03]\n",
      " [-5.000e+00  6.693e-03]\n",
      " [-4.000e+00  1.799e-02]\n",
      " [-3.000e+00  4.743e-02]\n",
      " [-2.000e+00  1.192e-01]\n",
      " [-1.000e+00  2.689e-01]\n",
      " [ 0.000e+00  5.000e-01]\n",
      " [ 1.000e+00  7.311e-01]\n",
      " [ 2.000e+00  8.808e-01]\n",
      " [ 3.000e+00  9.526e-01]\n",
      " [ 4.000e+00  9.820e-01]\n",
      " [ 5.000e+00  9.933e-01]\n",
      " [ 6.000e+00  9.975e-01]\n",
      " [ 7.000e+00  9.991e-01]\n",
      " [ 8.000e+00  9.997e-01]\n",
      " [ 9.000e+00  9.999e-01]\n",
      " [ 1.000e+01  1.000e+00]]\n"
     ]
    }
   ],
   "source": [
    "# Generate an array of evenly spaced values between -10 and 10\n",
    "z_tmp = np.arange(-10,11)\n",
    "\n",
    "# Use the function implemented above to get the sigmoid values\n",
    "y = sigmoid(z_tmp)\n",
    "\n",
    "# Code for pretty printing the two arrays next to each other\n",
    "np.set_printoptions(precision=3) \n",
    "print(\"Input (z), Output (sigmoid(z))\")\n",
    "print(np.c_[z_tmp, y])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6046846b",
   "metadata": {},
   "source": [
    "The values in the left column are `z`, and the values in the right column are `sigmoid(z)`. As you can see, the input values to the sigmoid range from -10 to 10, and the output values range from 0 to 1. \n",
    "\n",
    "Now, let's try to plot this function using the `matplotlib` library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "15849b36",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:15.269594Z",
     "start_time": "2022-06-17T10:47:14.988530Z"
    }
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1f1441e3b69b4f549d62f02ab3cf5fa0",
       "version_major": 2,
       "version_minor": 0
      },
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAEsCAYAAAA1u0HIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3wElEQVR4nO3de3zP9f//8dsObDOzA+NtjiHHL4YcEk0s5rT6OJSISqXkUH7pKGmFSuco5dDHh8/Up3yGUshxQkkUksyEbW3DprGDHd/v3x/LPub9HsPex92vl8su3u/n6/V6vx7v92Xe972er9fr+XTLyMgwISIiIk7N3d4FiIiIyPVToIuIiLgABbqIiIgLUKCLiIi4AAW6iIiIC1Cgi4iIuAAFuoiIiAtQoIuIiLgABbqIiIgLUKCLiIi4AAW6iIiIC1Cgi4iIuAAFuoiIiAtQoIuIiLgABbqIiIgLUKBLpXT06FEee+wxQkNDqVOnDi1btuS2225j+vTp/P777yXrDRw4kLZt29qx0str27YtAwcOvOJ6AwcOJCIiolyv+fbbb9OuXTuCg4Np1qzZ9ZZ4TX755RdeffVVMjIySrWfOHGCgIAAXn31VbvUJeLIPO1dgIit/fjjj9x55500adKExx9/nHr16nHmzBm+//57/vWvf+Hh4cFLL70EwKxZs8jNzbVvwZexcOFCvL29K+z1Vq5cycyZM5k2bRpt27YlPT29wl77auzfv5/XX3+dkSNHEhAQUNJep04dVq1aRePGje1Sl4gjU6BLpTN79myqV6/O+vXr8fX1LWkfMWIEUVFR/PrrryVtoaGhdqiw/Lp161ahr7dz505CQ0N58sknK/R1K4q3tze9evWydxkiDkld7lLppKamEhwcXCrMLwgICKBHjx4lz8eNG2fW5X727FmeeOIJGjduTMOGDRk8eDC33347rVu3LlnnQtfwe++9x7PPPsuNN95I3bp1GTZsGH/++ScbNmygf//+1K1bl7Zt2/Lhhx+a1fLdd9+VrNOwYUPGjBnD8ePHS60TERFh1uUeHx/PyJEjqVevHo0bN2bYsGEkJiZe8XMZP348CxcuZO/evQQEBJR0bV94L0uXLi21/tKlSwkICODEiRMlbW3btmXs2LEsXLiQzp07YzAY6NmzJzt27DDb3+rVq+nduzd169alefPmDB8+nI0bNxIdHc3kyZMBaN++fUktJ06coLCw0GKX++rVq7n11lupU6cOTZs2ZcKECaSlpZVa52pqE3FGCnSpdEJDQzl48CAzZ84kISHhqrbNz8+nb9++rF27lueee46PPvqIsLAw/vzzT4vrv/TSS6SlpfHuu+8ya9Ystm/fTq9evRg3bhwRERH861//olu3bjz//PPs2rWrZLtt27bxj3/8g2rVqvHBBx8wa9YsfvvtNyIiIjh9+nSZ9SUlJdGvXz+OHDnCq6++yocffkiXLl3Iysq64nt7/PHH6d27NzVr1mTVqlWsWrWKe+6556o+H4CYmBiWL1/OlClTmD9/PkajkdGjR3Pu3LmSdT7++GPuu+8+mjRpwkcffcTMmTPx8vJiyZIl9OnThwkTJgCwYMGCklrq1KljcX+fffYZ9913H82bN2fBggU899xzbNq0icjISM6fP3/VtYk4K3W5S6XzwgsvsG/fPt58803efPNNgoODadeuHd27d+fuu++mfv36ZW47f/58jhw5wo4dO2jVqhUAAwYM4OjRo8TGxpqtP23aNKZOnVry/IcffmDFihUcOnSoJKC6d+9OTEwMGzdupGvXrgC8/PLLNG/enBUrVuDm5gZAeHg4HTp0YO7cubz88ssW65szZw4FBQWsX7+eoKCgkvpiY2MpKiq67OfSsmVL6tSpg5eXV6lu7YuPwMujd+/erFixAnf34uMFHx8fRowYwd69e+nVqxfnzp3jlVdeYfjw4SxcuLBku7vuuovk5GQMBgMtWrQAoGvXrjRq1KhkncLCwlL7MhqNREVF0bdvXxYtWlTSftNNN9GrVy+io6N56KGHyl2biDPTEbpUOvXr12fr1q0sW7aMBx54gEaNGrFz505eeeUVunbtyqZNm8rcdu3atXTq1KkkzK+kdu3apZ6HhIRgNBpLHW1Wr14df39/Tp06BUB2djZ79uxh0KBBJWEOULduXbp06cJ3331X5v42btxI3759S8LcHmrVqlUSmEBJIKekpADFFyVmZWUxcuRIs21DQkKual9HjhwhJSWFyMjIUu2hoaE0btzY7LO6Um0izkyBLpWSl5cXgwcP5p133mHjxo0kJiaydOlSTCYTL7zwQpnbnT59+qpD52KenpY7xTw9PTEajQBkZGRgMpkIDg42Wy84OPiyV55fb33W4OXlBVDy/s6cOQNQZhf61bjwWtfyWVmq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KxNXNWrUKOLi4ujatWtJW2FhIVu2bGH06NEAtGrVimbNmrF9+3Z7lenUFOgOKDk5maCgoJLnBoOB5ORkO1bk+P7zn//QsWNHevfuzcqVK+1djsO79HcMin/PUlJS7FSR83nnnXfo0KED/fv3JzY21t7lOKXTp0/j6emJj49PSZu+766dutytZMiQIRw7dsysPSQkhK+//vqK23t4eJR6np+fX2G1OZsrfZZPPPEEzz33HAAHDhzgzjvvpFWrVrRs2dLWpToVd3fzv+fz8vLsUInzefvtt0tCKDY2ltGjR7N//34CAgLsW5gTuvS7Dir39931UKBbSUxMzDVvazAYOHXqFIGBgQCkpqbSvn37iirN6Vzps7z4r/u2bdsSGhpKXFycAv0yDAYDaWlppdpSU1N1nUY5Xfw7FxYWRp06dTh+/DihoaH2K8oJ1apVi4KCArKzs/H19QX0e3g91OXugPr27cuyZcuA4itAt27dyu23327nqhzX+vXrS/6iP3ToEAcOHKBjx452rsqxNWrUiMDAwJJrMy5cWdy6dWt7luU0vv7665LZur777jsyMzNp3ry5natyPlWqVKFnz55ER0cDcPjwYQ4fPswtt9xi58qck1tGRobJ3kVURtu3b+eFF14gISGBatWqUatWLVavXo2/vz/nzp3jiSeeYN++fXh6evLUU08xbNgwe5fssCZOnMjWrVvx9vbG19eX559/nn79+tm7LIcXFxfHpEmTSEtLIyAggHfffZe2bdvauyynMGTIEOLi4vDx8SEoKIiZM2fSuXNne5fl0FasWMG8efOIj48nODgYg8HA2rVrSUlJYcKECZw4cQJvb29mz55NWFiYvct1Sgp0ERERF6AudxERERegQBcREXEBCnQREREXoEAXERFxAQp0ERERF6BAFxERcQEKdBERERegQBcREXEBCnQREREXoEAXqWQ2b95MzZo1S/0EBATw2Wef2bs0EbkOGvpVpJJ75pln2LVrF2vXri01i5iIOBdNnypSiS1btoxVq1axZcsWhbmIk1Ogi1RSP/zwA88//zwxMTGaf1rEBegcukgllJiYyJgxY5gzZ46m/RRxEQp0kUomJyeHkSNHctddd3HPPffYuxwRqSAKdJFK5ssvv+TAgQPMnz+/1JXub731lr1LE5HroKvcRUREXICO0EVERFyAAl1ERMQF/H+zvQV94VXCmgAAAABJRU5ErkJggg==",
      "text/html": [
       "\n",
       "            <div style=\"display: inline-block;\">\n",
       "                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
       "                    Figure\n",
       "                </div>\n",
       "                <img src='' width=500.0/>\n",
       "            </div>\n",
       "        "
      ],
      "text/plain": [
       "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot z vs sigmoid(z)\n",
    "fig,ax = plt.subplots(1,1,figsize=(5,3))\n",
    "ax.plot(z_tmp, y, c=\"b\")\n",
    "\n",
    "ax.set_title(\"Sigmoid function\")\n",
    "ax.set_ylabel('sigmoid(z)')\n",
    "ax.set_xlabel('z')\n",
    "draw_vthresh(ax,0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d88b844b",
   "metadata": {},
   "source": [
    "As you can see, the sigmoid function approaches  `0` as `z` goes to large negative values and approaches `1` as `z` goes to large positive values.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "27f76310",
   "metadata": {},
   "source": [
    "## Logistic Regression\n",
    "<img align=\"left\" src=\"../work/images/C1_W3_LogisticRegression_right.png\"     style=\" width:300px; padding: 10px; \" > A logistic regression model applies the sigmoid to the familiar linear regression model as shown below:\n",
    "\n",
    "$$ f_{\\mathbf{w},b}(\\mathbf{x}^{(i)}) = g(\\mathbf{w} \\cdot \\mathbf{x}^{(i)} + b ) \\tag{2} $$ \n",
    "\n",
    "  where\n",
    "\n",
    "  $g(z) = \\frac{1}{1+e^{-z}}\\tag{3}$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f9d78db",
   "metadata": {},
   "source": [
    "  \n",
    "Let's apply logistic regression to the categorical data example of tumor classification.  \n",
    "First, load the examples and initial values for the parameters.\n",
    "  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "905829a8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:15.285596Z",
     "start_time": "2022-06-17T10:47:15.274594Z"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "x_train = np.array([0., 1, 2, 3, 4, 5])\n",
    "y_train = np.array([0,  0, 0, 1, 1, 1])\n",
    "\n",
    "w_in = np.zeros((1))\n",
    "b_in = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62526e7d",
   "metadata": {},
   "source": [
    "Try the following steps:\n",
    "- Click on 'Run Logistic Regression' to find the best logistic regression model for the given training data\n",
    "    - Note the resulting model fits the data quite well.\n",
    "    - Note, the orange line is '$z$' or $\\mathbf{w} \\cdot \\mathbf{x}^{(i)} + b$  above. It does not match the line in a linear regression model.\n",
    "Further improve these results by applying a *threshold*. \n",
    "- Tick the box on the 'Toggle 0.5 threshold' to show the predictions if a threshold is applied.\n",
    "    - These predictions look good. The predictions match the data\n",
    "    - Now, add further data points in the large tumor size range (near 10), and re-run linear regression.\n",
    "    - unlike the linear regression model, this model continues to make correct predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "24882bea",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-06-17T10:47:15.759620Z",
     "start_time": "2022-06-17T10:47:15.290598Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cba5d3949d3c4682931908d1d08ab636",
       "version_major": 2,
       "version_minor": 0
      },
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAGQCAYAAABWJQQ0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABly0lEQVR4nO3dd3xO5//H8VcGQoQkVuwQIkESxIrRRK0oRVVb2hpFjZotqv22FFVKtUbVrlnj12HP2quoUUWMWDFK1IoRRNbvj7tubtnrvhPez8fDo73Puc45n3PukfO+z3Wd2yosLCwWERERERERM7C2dAEiIiIiIvLiUAARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARERERERGzUQARSYFRo0bh6OiY4L+zZ89ausRU8/LyomvXrmbf7tq1a6lTpw4uLi6UKFGC/fv3x9vu/PnzODo6Mm/ePLPV9vj5Pn/+fLKXmT9/PgsWLEiXdSXk6decs7MzpUuXpmPHjvz9999pXndm16NHDxwdHS1dRoa6efMmX375JX5+fhQuXJiSJUtSt25dPvnkE4KCglK0rm3btjFq1KgMqjR9eXl50bRp03Rf7+P3XlRUVKLtFixYYHxfOTk5UbRoUSpXrkznzp3ZtGlTqreflZ4DEXOxtXQBIlnRkiVLsLaOm98LFy5sgWqyrosXL9KxY0datmzJZ599RkREBEWKFLF0WUZt27bFz8+PQoUKJXuZBQsWYGNjwzvvvJPmdSXmzTff5O233yYyMpIzZ84wadIkmjRpwvbt2ylTpky6bCMz6tu3L2+99Zaly8gwx48fp1WrVkRERPD+++9TuXJlIiIiOHDgAAsXLmT16tUcOXIk2evbsWMHY8eO5dNPP83AqtPHjBkzsLOzs3QZTJkyhcKFCxMeHs6ZM2dYvnw5r7/+Oh07duTbb7/FxsYmRevLSs+BiLkogIikwksvvYStrd4+aXXw4EEiIiIYN24cuXLlsnQ5cbi6uuLq6prp1gVQokQJAgICAGjYsCG+vr40bNiQhQsXMmTIkHTbTmbj4eGBh4eHpcvIEFFRUbRv3x6A7du3U6xYMeO8Fi1a8PHHHzNp0iRLlZfhatasaekSAKhRowalS5c2Pu7Tpw/ff/89gwcPpkiRInz88ccWrE7k+aAuWCLp7Pjx4xQpUoQ33niD2NhY4/SQkBBKlChBr169jNPat2+Pt7c3Li4ulCxZkvr167Ns2TKT9T3uPrB7925atGiBi4sLZcuWZeTIkTx48IDRo0dTqVIlChcuTIMGDeJ8O+rl5UX79u2ZMGECVapUoWDBgtSuXZsdO3YkuS8XLlyga9euuLm5UaRIEWrXrs2cOXNM9ishN27coFevXpQpU4ZChQpRt25dk31bsGABHTp0AKBIkSI4OjqmS/eLkJAQOnbsSMmSJXFxcaFx48Zs3749TrtTp07RqlUrChcujLu7O507d8bDw8OkG9q8efPidJtauXIljRo1okSJEri5uREYGGjsFta0aVP27NnDrl27jF05Hu9TfOuKiopi7Nix+Pr6UqhQIby9venevTvBwcEp3u/y5csDcOfOHZPpN2/epH///nh4eODi4kL16tX57rvvePTokUm7ffv20ahRI1xcXChfvjx9+vShUKFCjBgxwtjm8Wtx3759vPnmmxQpUgR3d3fj/D/++IMWLVpQrFgxXF1deeWVV+K8zhI7fgBHjhzh7bffply5chQrVozatWszePBgY/eZESNGxOmCldRrDZ50r1m3bh0dOnSgRIkSlClThv79+/Pw4cNkHePly5fz0ksvUahQIdzc3OjZsyfXr183aePl5UWnTp2YMWMG1apVw8XFhbp167Jr164k179q1SpOnTrFF198YRI+HsudOzeffPKJ8XFSnx+jRo1i7NixgGm3vccePHjAsGHD8Pb2plChQlSuXJkhQ4Zw9+5dk+0m570ChueudevWFCtWjKJFi9KqVSsOHz5s0qZHjx6UL1+eLVu20KRJEwoVKkSDBg0ACAwMjPMZEBISQufOnSldujRFixblpZdeYvTo0cbXQ3I+Q9ND7969adq0KePGjTM5Pml5Dh48eEDLli2pUKEChQoVonTp0jRr1oxt27ale/0imY2+whVJhYiIiHj7E+fIkQNPT0/GjBlDr169mDJlCh988AGRkZF07tyZkiVLGv8YAeTKlYsPPviAkiVL8ujRI5YuXUqnTp0oUKAAtWvXNll327Zt6du3Lz179uS3335jzJgxzJ49m9KlS/PZZ5+RPXt2Bg8eTOfOndmzZ49JF7EVK1Zw48YNPvnkE6ytrZk4cSJt2rTh77//Jn/+/PHu4z///EODBg2oUqUKo0ePJleuXOzbt4/+/fsTGRnJ+++/n+DxefDgAa+++irXr1/n448/xsXFhVWrVtGxY0emTp1KmzZtqF+/Pn369GHixInGLg9p7dt/7do1AgMDsbe358svv8TBwYGFCxfSqlUrlixZwksvvQQYTqj8/f3x9PTku+++I1euXOzZs4dbt24luv7NmzfTvn17OnbsyEcffUR4eDgbNmxg/vz5tG/fnq+++ooPPvgAKysrvvrqK4BE96lTp06sW7eOXr16UbVqVa5cucL8+fPZuHGjyYl9chw9ehR4EkQA7t69S2BgIPny5WPIkCE4OzsTFBTEt99+y61bt/jyyy8BQxeRli1bUq9ePX744QfA0G89IiIi3m29/vrr9OzZk/fff5/79+8DsGHDBtq1a0fHjh3p0qULMTEx/Pbbb7Rq1YpNmzbh7e2d5PH7999/efXVV/Hy8mL06NFky5aNP//8k7lz5zJo0CBy584dp5bkvNae1rFjR7p27cq0adM4cOAA3377LUWKFKF///6JHt/FixfTvXt3WrduTf/+/bl27Rpjx47lr7/+YtOmTeTMmdPYdsmSJZw7d44PP/yQnDlzMnbsWNq1a8ehQ4fIkydPgtvYunUr1tbWyQ7iSX1+tG3blnPnzvHzzz/HOSmPioqidevW3Lp1i48++ojChQtz5swZxo0bx/nz55k7dy6Q/PfKyZMnadKkCe7u7owdOxYrKytmzJjBK6+8wqZNmyhXrpyxbWhoKF27dqVv377079+fmJiYePcvJCSE+vXr4+TkxJAhQyhUqBB79+5lypQpdOvWDUdHxxR9hqZV27ZtWb16NZs3b6ZFixZA2p6D6OhoChQoQPPmzSlatCj37t1j3rx5tGnThh07djzXXSlFFEBEUqFo0aLxTj948CClS5fm3XffZceOHQwbNoy6devy22+/cfr0abZt22bSx3nq1Kkmyzdr1oySJUuyfPny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uTO5c+fOsM/QHj16AIYuaPnz56dKlSosW7Yszl2s0vocDBw4kDt37jBx4kSioqKoXr06P/74o/H9IvI8swoLC9NIJ5HnmJeXF35+fgkONhWDsLAwypYty9ixY01ui/uiOnbsGLVq1WLp0qWJdtWTF4/eKyKSVroCIiIvnLNnzzJz5kw8PT1xcXHh5s2bTJ06lYIFC/Laa69Zujyz27t3L+vWrcPd3Z0CBQpw+fJlJk6ciLe3t8mVI3nx6L0iIhlBAUREXjjW1tbs3r2bn376ifDwcJydnfH392fOnDnJ7nL0PLG2tub33383dhsrWLAgjRo1YsiQIfGOdZIXh94rIpIR1AVLRERERETMRl9tiYiIiIiI2SiAiIiIiIiI2SiAiIiIiIiI2SiAiIiIiIiI2SiAiIiIiIiI2SiAiIiIiIiI2eh3QDIpe3t73X9fREREJJOIiYkhPDzc0mU8FxRAMilra2sFEBERERF57ugMV0REREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREREREREzEYBREQy3tWrMHdu4m3mzjW0y8q0n088D/spIiIZQgFERDLW1atQrx507AgTJsTfZsIEw/x69bLuSav284nnYT9FRCTDKICISMZ5fLJ6/Ljhcb9+cU9aJ0wwTAdDu6x40qr9fOJ52E8REclQCiAikjGePVl97OmT1qdPVh/Laiet2s/naz9FRCTDKYCk0b1792jcuDGrVq1KsM3Vq1dp3bo1vr6+1KlTh+3bt5uxQhELWbcu7snqY/36QenScU9WHzt+3LB8VqD9fL72U0REMpwCSBosWLCAKlWqcODAgUTb9enTh0aNGnHgwAFmzJjB+++/z8OHD81UpYiFdOgA48cnPP/cuYTnjR9vWD4r0H4aPC/7KSIiGU4BJA3eeecdgoODqVGjRoJtoqKi2LJlC+3atQPA09OTMmXKsHPnTnOVKWI5ffsmftIan/HjDctlJdrPhGXF/RQRkQylAJLBrl27hq2tLTlz5jROc3Fx4fLlyxasSsSMUnLSmpVPVrWfcWXl/RQRkQyjAGIGNjY2caY9evTIApWIWEjfvlCqVOJtSpXK+ier2s8nnof9FBGRDKEAksHy589PZGQk4eHh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8OBBxowZw/Lly43zfXx8qFq1Kj169GD//v1s3rw5zl2w2rZty82bNxk4cCBHjhzh119/pXfv3kkely5dujB58mR+++03/vrrL0aMGGFyhaNUqVLkyJGDOXPmcOLECdasWUPXrl1N1lGhQgVCQ0OZNWsWBw8e5OjRo3h4eBiDS1BQEPPnz2fUqFFJ1gOwb98+du7cSVBQEKNGjWLZsmUMGTIEgHfeeYecOXPSvn17Dhw4wObNm+ncuTNvvPFGguM/klKyZEns7e2ZMGEChw8fZteuXaxevZpmzZqxbt06Tp06xZo1azhx4gRVq1ZN1TYk61MAEREReYHY29uzfft2evbsyZQpU/Dz86NmzZpMnz6dDh06xHsb3mfVrl2blStX8scff/DSSy/x2muvER4eHu9A84YNGzJ16lR69+7NypUrE1zn9OnTCQoKolq1asZbz/bq1YuBAwfyySef4Ovry6+//srSpUvx8vJKcD1DhgyhYsWKNGzYkKZNm3L+/Pk44zIWLFjAgwcPqFu3Ln379qVp06Ym8wsWLMjPP//M8uXL8fPz4/vvv+eNN95I8rh0796d9u3b895779G0aVMuXLiAv7+/cX6BAgWYP38+c+bMoXLlygwbNozmzZubrKNu3bp89NFHDBgwAH9/f7Zv307z5s3p378/77//PrVq1eKXX36J99bB8QkPD6dbt274+voyd+5c1qxZY7xVbs6cOVm/fj1hYWHUqVOH1q1bU716dWbOnJmsdccnZ86czJgxg1WrVlG9enWmTJlCpUqVyJMnD926dcPb25u+ffvy6aefmgz8lxeLVVhYmPk6ZkqyOTg4mAzmExERSYk5c+YwZ84c/br4CywgIIBKlSolefeuzGLr1q107Ngx0/4gYUxMDHfv3rV0Gc8F3YZXRETkOfXw4UPjyVzx4sWxsbGxbEEi8bhx4wZ3794lNDTU0qWImegrdhERkefU3r17KVWqFKVKleLatWuWLkckXp999hmlSpWibdu2li5FzERdsDIpdcESERERyTzUBSv96AxXRERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgEkDU6fPk1gYCC+vr40aNCAoKCgeNtt2rQJf39/qlevTu3atVm7dq2ZKxURERERyRz0S+hp4OfnxxdffEFgYCDbtm3j448/Zu/evSZtHj58SNmyZdm6dStubm4cO3aMBg0acPr0aXLlypXguvVL6CIiIiKZh34JPf3oDDeVLl68yI0bNwgMDATA39+f+/fvExwcbNIuMjKSyMhIrl+/DkDhwoXJli0bVlZWZq9ZRERERMTSbC1dQFZ1+fJlnJ2dTaa5uLhw5coV3N3djdMcHByYNm0ar776KvXr1yc8PJzp06eTM2dOc5csIiIiImJxugKSBvF1kYqIiDB5fP/+fSZNmsSSJUsYMGAAJUqU4JtvviE8PNxcZYqIiIiIZBoKIKnk4uJi7Fb1WGhoKEWKFDGZtnHjRuzt7alTpw6+vr5MmjQJW1tbNm3aZM5yRUREREQyBQWQVCpZsiROTk6sW7cOgO3btwNQvnx5QkNDCQ0NBcDNzY3Dhw9z6tQpAK5cucKlS5coV66cZQoXEREREbEg3QUrDYKDg+nduzfXr1/H0dGR8ePH4+XlRY8ePQCYMmUKAD///DPjxo0jOjoaOzs7+vfvT4sWLRJdt+6CJSIiIpJ56C5Y6UcBJJNSABERERHJPBRA0o/OcEVERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQERERERExGwUQNLg9OnTBAYG4uvrS4MGDQgKCkqw7axZs6hVqxZVqlShd+/eZqxSRERERCTzsLV0AVlZu3bt+OKLLwgMDGTbtm106tSJvXv3xmk3adIk1qxZw7JlyyhYsCDR0dEWqFZERERExPIUQFLp4sWL3Lhxg8DAQAD8/f25f/8+wcHBuLu7G9tFRUUxduxYtm/fTsGCBQGwsbGxSM0iIiIiIpamLlipdPnyZZydnU2mubi4cOXKFZNply5dIiYmhsGDB+Pn50ft2rWZM2eOGSsVEREREck8dAUkDayt4+a3iIgIk8dXr17FycmJsWPHUqBAAUJCQggMDMTd3Z1atWqZq1QRERERkUxBV0BSycXFhevXr5tMCw0NpUiRIibT8uXLR0xMDAUKFADA1dWVGjVqcOrUKbPVKiIiIiKSWSiApFLJkiVxcnJi3bp1AGzfvh2A8uXLExoaSmhoKABubm7Y29uzZMkSAP79918OHjxIjRo1LFO4iIiIiIgFWYWFhcVauoisKjg4mN69e3P9+nUcHR0ZP348Xl5e9OjRA4ApU6YAcObMGT766COuXLlC9uzZ+fjjj2nevHmi63ZwcIi3i5eIiIiImF9MTAx37961dBnPBQWQTEoBRERERCTzUABJPzrDFRERERERs1EAERERERERs1EAERERERERs1EAERERERERs1EAERERERERs1EAERERERERs1EAERERERERs1EAERERERERs3khA8j69estXYKIiIiIyAvphQwg3bp1o3LlykyePJnbt29buhwRERERkRfGCxlAjh8/zocffsjixYupUKECH374IcePH7d0WSIiIiIiz70XMoDkzJmT9u3bs337dn777TfCw8OpV68ezZs3Z9WqVcTGxlq6RBERERGR59ILGUCeljdvXvLkyUO2bNm4cOECAwYMwNvbm/Hjx1u6NBERERGR545VWFjYC/d1f1RUFCtWrGDmzJn8+eef1K9fn86dO9OwYUOioqL4v//7P6ZMmcKuXbssVqODgwPW1snPh35LMrAYEZEk7G5l6QpERDJWTEwMd+/etXQZz4UXMoC4u7sTFRXFO++8Q+fOnXF1dbV0SXGkNIBYTcnAYkREkhDbw9IViIhkLAWQ9GNr6QIsYciQIbRu3Ro7OztLlyIiIiIi8kJ5IQPIu+++a+kSREREREReSC/8IHQRERERETGfF/IKyPOoZiFLVyAiIiIikrQXchB6VpDSQegiIiIiknE0CD396AxXRERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgFERERERETMRgEkDU6fPk1gYCC+vr40aNCAoKCgRNsfO3aM4sWLs2rVKjNVKCIiIiKSuSiApEG7du3o168fBw4cYPDgwXTq1CnBttevX6dr1644OzubsUIRERERkcxFASSVLl68yI0bNwgMDATA39+f+/fvExwcHKfto0ePaN++PcOGDaNYsWLmLlVEREREJNNQAEmly5cvx7ma4eLiwpUrV+K07dOnD82bN6d+/frmKk9EREREJFNSAEkDa+u4hy8iIsLk8bRp08iVKxfdu3c3V1kiIiIiIpmWraULyKpcXFy4fv26ybTQ0FCKFCliMu306dNs27aNatWqAXDp0iU+/vhjLl++TNeuXc1Wr4iIiIhIZqAAkkolS5bEycmJdevWERgYyPbt2wEoX748oaGhgCGkfPPNNybLNW3alB49etCsWTOz1ywiIiIiYmkKIGkwf/58evfuzWeffYajoyMLFy7E2tqaYcOGATBlyhQLVygiIiIikrlYhYWFxVq6CInLwcEh3jEmIiIiImJ+MTEx3L1719JlPBd0hisiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajACIiIiIiImajAJIGp0+fJjAwEF9fXxo0aEBQUFC87bp06YKPjw/VqlUjMDCQY8eOmblSEREREZHMQQEkDdq1a0e/fv04cOAAgwcPplOnTvG2a968OQcOHGDfvn2888479OnTx8yVioiIiIhkDgogqXTx4kVu3LhBYGAgAP7+/ty/f5/g4OA4bZs3b46trS0AlSpVIjQ01Ky1ioiIiIhkFgogqXT58mWcnZ1Nprm4uHDlypVEl5szZw6NGjXKyNJERERERDItW0sXkJVZW8fNbxEREQm2//HHH9mzZw9r167NyLJERERERDItBZBUcnFx4fr16ybTQkNDKVKkSLztJ06cyJIlS1i+fDl58uQxR4kiIiIiIpmOumClUsmSJXFycmLdunUAbN++HYDy5csTGhpqHOcRHR3NgAED2LZtGytXriR//vwWq1lERERExNKswsLCYi1dRFYVHBxM7969uX79Oo6OjowfPx4vLy969OgBwJQpUzh//jw+Pj6ULl0aGxsb47I//PAD1atXT3DdDg4O8XbxEhERERHzi4mJ4e7du5Yu47mgAJJJKYCIiIiIZB4KIOlHZ7giIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2tpYuQEREREQSFhMTw9WrV4mKirJ0KS8UW1tbChUqhLW1vq9PbwogIiIiIpnY1atXcXBwIHfu3JYu5YVy7949rl69SuHChS1dynNHkU5EREQkE4uKikpe+Lh6FebOTbzN3LmGdpKk3Llz66pTBlEAEREREcnqrl6FevWgY0eYMCH+NhMmGObXq6cQIhalACIiIiKSlT0OH8ePGx736xc3hEyYYJgOhnYWDiFDhw6l33/1LF26lPbt21ukjq1bt7Ju3TqLbPtFpgAiIiIiklU9Gz4eezqEPB0+HssEIeSx1157jXnz5llk2woglqEAIiIiIpJVrVsXN3w81q8flC4dN3w8dvy4YfkUsrKyomfPnnh7e1OmTBlmzJjBu+++S8WKFSlbtix79+4FIDw8HE9PT9zd3SlbtizNmzfn9u3bcda3atUqAgICjI9nzpyJh4cHFSpUwNfX1zhv69atuLq68vbbb1OhQgU8PDzYv39/ktsaOnQoL7/8MvXr16ds2bIEBARw69YtTpw4waRJk5g3bx4eHh70798/xcdCUkcBRERERCSr6tABxo9PeP65cwnPGz/esHwq1K9fn8OHDzNx4kT69OnDBx98wNGjR/nwww8ZMWIEAHZ2dmzbto3g4GBOnTpFrly5mDFjRqLr3bVrF2PHjmXXrl0EBQUxYMAAk/kPHz7k008/JSgoiK5duzJ8+PBkbSsmJobFixdz6tQp8ubN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dOrUCYC+ffuyd+9eli5dyqlTp2jYsCFt2rTh3r17aT9IIiKSagogIiJiYvDgwRQpUgQHBwcCAgKoUKEC7733Hjlz5sTT0xNPT0+OHz8OwM8//4y7uztdunQhV65clC1bls8++4zZs2cTG/ukh2+XLl2oXr061tbW5MqVK97t9urVi5EjR7Jx40ZatGiBq6srPj4+jBgxgocPHyZa8+bNmxk9ejSLFi0if/783Lx5k59//pkJEyZQqlQpcubMyYcffkh4eDj79u1Lv4MlIiIpZmvpAkREJPPKkSOHSZB4PC0yMhKAS5cuUbx4cZP5JUqU4P79+9y4cYP8+fMne1vW1tZ07tyZzp07Ex0dTUhICNu3b2fw4MFERUUxdOjQeJc7c+YMnTt3ZtKkSVSsWBGAs2fPAoarKk+Ljo7m8uXLya5JRETSnwKIiMgLIkeOHERERKTrOosVK8b+/ftNpp0/f55cuXKRL1++FK3r0aNHZM+eHQAbGxvc3Nxwc3Nj8+bNHDt2LN5lbt++Tdu2benevTvNmzc3Tn8cfPbu3Yurq2uK6hARkYylLlgiIi+I8uXLs2LFCh48eMDFixcTvKKQEm+++SZnzpxh8uTJ3L9/n1OnTjFy5Ejee+89rKysUryu7777jpMnTxIVFcW9e/dYunQp27Zt45133onTPiYmhi5duuDp6cnHH39sMs/V1ZUGDRrQu3dvgoKCiIyM5J9//uG3337jwoULadpnERFJGwUQEZEXxPDhw4mKisLNzY3WrVtTpEiRNK+zaNGiLF++nJUrV1KuXDlatWpFo0aNGDJkSIrX9c4777B3715ef/11ihUrRrly5fjxxx+ZNWsWLVq0iNN+z549bNiwgZUrV5I/f37jnbD69esHwNy5c6lRowbt27enePHiNGzYkJUrV5IjR4607raIiKSBfgdERERERETMRldARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbBRARERERETEbGwtXcDzotpKe24+Up4TkczNOXsM+14NT9d12tvbY22tzz8RydxiYmIID0/fzz9JHQWQdHLzkTU3IvQHWERePNbW1gogIiKSbPqLISIiIiIiZqMAIiIiIiIiZqMuWCIiYnbt2rXj9u3bli4jjrx58zJ//nxLlyEi8lxTABEREbO7ffs2K1assHQZcTRv3tzSJYiIPPfUBUtERERERMxGAURERERERMxGAUTSz+euMLgUDPM0/NsyMf23EbwVRlZKv/WF/AkT6ife5kYIbJ9qOm1CfcOyKWGO45Oetk6CZZ+m/3rvXYdhHnBsfeLt5nWEzeOTX8uqofBLv/jnLfrA8E/EgqKjo/Hw8MDDwwM3NzdsbGyMj9O769fQoUPp169fipe7d+8eb7/9Nu7u7lSsWJHFixcn2HbOnDk4ODgY98HDw4PZs2fH23b8+PGEhoamub7kCgkJwdHRMcXLbd26lUqVKsU77+jRo7i6uia6fK9evejUqROxsbGJtnv06BGvv/46ZcqUoUGDBmzdupV169aluN6szsPDg3/++SfVy0dFRdG8eXPGjBmTjlWJOWgMiKSvrkuheCW4cxW+rgolfMGttqWrSphrdei7KfE2N0Jg51R4qfuTaUktk5CsdHwCemXMev+vF/h1gvKNzVfLmxNhTA0IWgcVAtO2LpFUsrGx4cSJE4DhBLlSpUrGx5nFJ598QpEiRQgODubKlSv4+vpSt25dihYtGm/7+vXrs2zZsiTXO378eAICAnBxcUnnijOPdevWsWPHDvbv34+VlVWibdesWcOVK1c4ffo0YAhkYWFhBAa+WJ9PaX3929ra8tNPP+Hj40PTpk2pUKFCOlUmGU1XQCRj5CkERSrA7cuGx7vnwNSWT+YfWQXjAgz/H7zVcHVg1tvwZQXDt+Pn96d8mwd/gRHehuUnNYEb55/M2zXTMP3LCjDK98m2Lx81bBsgIhx+bAND3AxXKiY1gZgYwwlz6AnD8t/WNbT9uqqhboCwf2D664arGoNLwZKPU358oiNh2ScwsjIMLQez2sLDe/+t/zJMfhWGuhtq/7jgk22PC4CfusCYmvBFGQi/CSH7DNO/rGg4Hof/G+h7+4phn74oY9jn+Z0M068cN+zXF2VhcGlY8blh+tZJhqsQYDgOKwcbjsEwD1jUAx49MMxbNRTGv2y4KvRFWcO279+Kf7+vnoTgLVD/wyfToh7BbwNgeHnD9icFQuRD0+WergVg3ShD+yFuhtrDLpu2v3nBUOffyw2PbWyh2XBYMzzh50TEQmJiYhg8eLDxKkKPHj148MDw/oqMjKRv376ULVsWb29vypUrx9ChQ5Oc96yxY8dSuXJlPDw8eOWVV7hy5Uq87dasWUOXLl0AKFy4MI0aNWLlypVp2r9Ro0bxzz//8Nprr+Hh4cHOnTsBCAoKonHjxri7uxMQEMCtW4bPjaFDh9K4cWMCAwMpX748q1evJjQ0lDfffBMfHx/KlSvHl19+CRiuKvXq1Qs3NzdKlSqFv78/169fBwzfjvfp0wcfHx9KlSrF2rVrjTX98ssveHt74+HhQZMmTTh//jzxWbZsGRUqVKB8+fK89957ie7n8OHDGT58ONmyZTNO8/Pzo2zZspQrV46AgAAuXrzI3bt36dGjB0eOHMHDw4OpU6cyadIk5s2bh4eHB/379wdg/fr1+Pn5Ub58eapVq8Yff/wBGK48Va9endatW1OxYkWmTZsWp5aAgAC6dOlCzZo1KVOmDDdv3mTfvn0EBARQsWJFvL29TW4CMXPmTDw8PKhQoQK+vr4EBAQAhitCpUuXplOnTnh5eTF48GAiIyP55JNPqFy5MuXKlaNt27bcu2f4ezV9+nTKlStHmTJl8PHxYceOHcZjU6ZMGdzc3KhevboxeOTPn5+QkBAADh8+TN26dfHw8KBq1aps3brVWJ+VlRV9+vShUqVKFCtWzORKW548eRgwYABfffVVos+PZC66AiIZI2QfXPob3Oomr33UQ2j8KRT1gk3fGU4Ue6TgDjmhJwzdbz7eC07FYOd0mPMu9N8BZ3bBxrHQfxfkzgf7FsHOuB/Y/DELoiJg+BnD4xMbwcoK3poEv/aD/x2Kf9uz3wXv5tD1N0OQSKprEcQ9PhvGQnZ7+PSg4fGiHrB5HLwy2HDi7fUqfLDSsP6RlU3Xlc0OPtoOttnhwW1Y3AO6LwfHooarN19Xha8uGI6Biwf0WmsIFCf/u4qz8nOo3Bpe7msIA2d2xa1392zD9P8dApvsMK8DrB8JrxpOAoiNgc6/gEMBmNrC0L7+R3HXc2QVVGoFNk/+QLN+FNwMgc/+NkxP6vjtmQtHV8HHf4Jdbji31/A8PRb2D/zwCrT6FryaPpleIRDmvGPoApY7f+LbEDGj2bNns2vXLg4dOkT27Nnp0KEDI0eO5Msvv+Sbb74hNDSU48ePY2trS/fuT67EJjbvaYsWLSI4OJh9+/Zha2vLqFGj+Pzzz/nxxx/jtL106RL58uUzPi5cuHCiXWQ2b95M2bJlsbe3p0uXLvTqFfdq5aeffsq0adNYunSpsXvTxo0biYyM5JdffqFAgQK0aNGC2bNn89FHhs+N8PBwlixZQsGCBQEIDAzk008/xd/fnwcPHuDn50dAQABhYWHs3r2bU6dOYW1tzZ9//omNjQ1gCCBvvvkmEydOZMmSJQwaNIgmTZpw4sQJ+vXrx969eylWrBjTp0/n3XffNZ4sP3b27Fk++OADdu7cSenSpfnzzz9588034z0O169fJygoiKZNm5pMX7JkCYULFwZg0KBBjB49mkmTJjFq1CiWLVtmvHoUGhpKWFgY48ePN257+PDhrF27FkdHR3bv3s27777LmTOGv0937txhzJgxlC5dOsHnxs7Oju3bt5M9e3Zu375Njx49WL58OUWLFiUkJISqVaty4cIF/vrrL8aOHcuuXbvIly8fixYtMgk19+7dM578gyFQ2tvbc/Cg4e9Vjx49GDduHH369KFnz55cvXoVZ2dnY9g6cuQIkydP5vz58+TIkYPjx4+TK1cuk1ojIyN57bXXmDx5Mo0bN+bIkSM0bNiQoKAg4+vxpZdeYuLEiRw8eJB69eqZBMI333yT//3vf8TGxiZ59UkyBwUQSV/TX4PoKLh/E/pthbzJvNyex8UQPgCK+sDeFN6H/8RG8GxkCB8AtbrAz70NVxGOrIIqbxrCB4CdQ/zrKOYDa4cbgkzJalChiemJbXwe3oMzO6HP74bHNtnAq1nC7RM6Pn8vNZwY71tgeBwVAe71DFcZTm2FnqufrD+bnek6yzUwhA8whIR/g03HtVjbGK4IlKgKS/qDbQ7D/pX/71K/a3XY9r2hppLVwbNh3LqPrYWaHZ5su043+PXDJwGkWCVD+AAo6g23Lsa//zfOQUF302lHVsFrY56EkqS6Zh1ZBbW7GMIHQKkaT+bdCTVcjXn9O9Pw8fg45HOFm+cVQCRTWbt2LR06dMDOzvD+6tatGx9++CFffvklK1eu5KuvvsLW1vDnOnfu3MblEpv3tKVLl7J7924qVqwIGE72EjtxfXwC/1hERES87dq2bUuHDh2wsrIiJCSEhg0bUqZMmWR3I6pUqRIFChg+N7y9vbl48cnnRtWqVY3hIzw8nE2bNhm/KQfDSXFwcDB169blwoUL9OjRg5o1a9K4cWOcnJy4ffs2dnZ21KlTBwAfHx/j+jdu3EijRo0oVszw96JLly707t3b+C3+Y7///jsNGzY0HqtnT5qfFhISgqurq/G5eGz58uUsX76ckJAQwsLCqFmzZrKOzbp16zhx4oRJ+zt37nD//n3AMHYisecQoEGDBmTPbvjbsGvXLoKDg6lf/8nfBhsbGy5cuMCqVat48803jSf6Dg6mfyOLFCliMi5m6dKlXL9+nQULDH+vIiIiqFevHvb29nh4eNChQwcaNmxIQEAA3t7e3Lx5ExsbGzp37kzdunWpX78+JUqUMNnGyZMniYmJoXFjw+e/l5cXFStWZM+ePcZQ16BBA8DwXN65c4fbt2+TN29eAAoUKICVlRU3b940CdCSeSmASPrquhQKl4eJDeHAYnCtZphuZQUkPijPyNom+W0fi3fA33/bfBRuCDhJKfsS/O9vOL7ecNL/20cwOOi/9aSThI5PbAy8+yOUq2faPvym4dg9fcUgMbExUKwyfLQt7jwXD0PYOLERDvwfLP/UsH+NBkGFVwxdo7ZMMFwp+XDLM+t95vgm9nxa2STwfPzHOgM/dk5tNQSt/QsNAdL6mV6mSQwMFbGEZwcsW1lZGaeFh4cbg8mzEpv3tJiYGIYPH55kFyIwnGw+/gYb4MqVK1SpUiXetjly5DD+v6urK/Xr1+fYsWPxBpCkvpW2sbFJcOB2TEwMVlZWHD582HhC/bSTJ0+yfv16du/ezYABA9i5cyc5c+ZMcP3xbefpY/7YgwcPTLpTJeXZ8LFo0SImTZrEwoULqVixIvPmzUtwvMyzxycmJoZmzZoxd+7cZG8/MTExMVSuXJlt2+L+bQgPD0/R2JyYmBh+/PFH6tWrF2fegQMH2LRpE7t37+bVV19l+PDhdOjQgeDgYNavX8/evXsZPHgwixYtMglDyX1O4ElAfnZeUgP/JXPRGBBJf7bZodtSwzfVmycYpjkWM3STinpk6EZ0Kp4T5LTwaAAnNjwZC7B7tmGAt50DlPKDoLWG7cbGwoUD8a8jeCtEPwK/9+DNSYaT/jtXwd7ZMH4i8mHcE1i73IarCY/3MyYagpPYt/iOT8Wmhq5ID+8aHt/9F87uNmzb2dVQPxiuZNz9N+F1l/KD0GNw5L8rJrGx/+17FBxdYzgedbvB29MN63r0AP5aYrgyUK8PtP4OrhyNu97ygYarUpERhu5bu2aAZwoGkT+WrxRcP2M6zbMhbP3e8NoAOPNH3DEgz7bfOf3JsbocZHieAHzbGI5t+E34v56my0VHGbqkOZdMed0iGSgwMJD58+cTERFBTEwMM2bMMH4T7Ofnx/LlhrFM4eHhHD9+3LhcYvOe1rRpU8aPH8/Vq4b3yZ07d9iyZUu8bV955RVj16zQ0FA2bNhAkyZNAMOPRz7uAgSwYcMGwsPDAfjnn3/4/fffjVccnuXs7My5c+eAlJ8oOjg44Ofnx9ChQ4mJiQEM40dOnz7N/v37uXz5Mm3btmX8+PGUKVOGs2fPJrq+Bg0asGHDBi5fNvy9mD17Nr6+vnG++a9VqxabNm3i9u3bAOzduzfBdbq6unL+/HmTfbt27Rru7u54e3sTHR3Nvn37Elz+2ePTsGFDVq1axf79hvGQUVFRrF69OtH9Soyfnx/Hjh0zriM2Npa1a9cSFRWFn58fa9euJTIyktjYWA4cSOBv5H+aNm3KqFGjuHvX8Bn877//snv3bv799182bdpEYGAgw4cP54033uDo0aMEBwdz+PBhWrVqxejRo/H3948z+LxcuXKA4eoUGJ7fI0eOJPuK0ePX9uPgLJmfroBIxrB3hp5rYGwtw1iESq0MgWBoWchdAFw8U7/uy0dh4FNdaAqWhYG7DX3+JzU2BA3nkvDef92ZfN+C0zsMg7hzOECBMob/Puv+LcNJa1SEoZuSfy/DQHEwdO/6oozhRL3/TtPl3vvJMFB913TDY++W4O6f+D48e3wCP4NVQ2B0NcDKMGi66TBD2w7zYEEX+PUjyF/acPUhoW5kufNB9xWwbJChu1VMtOFYezQ0BI5f+xna2dpB2ymQMw/8cxiWDDAEo+y5oN2cuOut1dnQfWqkjyHUuAdAk88T38f4eDUzXP15/dv/rnRhWM9v/Q03CLCyhvyloNuyhNdRq4vhBgOjqhjW4VAQOj11q1CbbIbxON83Mgzsb/m1YfrR1VC4grpfZRJ58+bNlL86/rhLhzl17tyZc+fO4ePjQ2xsLAEBAXz+ueH9NXz4cNq1a0fZsmVxdnYme/bsxhPlxOY97b333uP69evUq1fPeILcp0+feL/B/vrrr+natSvu7u7Y2toyduxYypYtCxi63gwdOtTYFWrbtm107dqVbNmykSNHDoYMGUL16tXj3cf//e9/9O3bl0GDBsU79iQpCxcupH///nh6emJlZYWzszOzZs0iIiKCbt26cevWLXLkyEGTJk1o0qQJFy5cSHBdnp6efPvttzRu3JjIyEhKlixp7E70tBo1atC5c2d8fHxwdHRM8Pa8YBhM7e7uzu+//24Mjx06dGDFihWULl0aZ2fnRG/h26ZNG3766SdcXV1p1aoV3333HfPmzeODDz7g7t27REdH4+/vH2eMSXLly5ePFStWMGjQIPr37090dDSenp40bNiQt956ix07duDu7o6DgwNlypSJ93X02GeffcaQIUOoVq0aVlZW2NraMmzYMMqUKcN3331H9+7dyZ07N6VLl2bWrFncvHmTgQMHcunSJXLlykXVqlXjXI3Lnj07S5cupVevXvTq1Qt7e3sWLlxI/vzJ+7xevHgxTZs21fiPLMQqLCxM16zSgdtvDtyI0AWlTCsiHHLYG/5/yUDImTd1J9CW8Oi+IRiA4QrPWD/4POjJGIis5sc24FYn427zG5/oSMNg/JajX/jb8ObLEcOZ1++m6zodHBywfra7m6SLiIgIbGxssLW1JSIiggYNGjBq1Cjq1KmT6Dwxv3Xr1vHFF1/wxx9/xBlHk9mFh4djb2/4Gzlw4EDy5s1rDMGZXVhYGN7e3qxZs8Y4zikhMTExxis3Ylm6AiIvhjHVDd16sucyjBFoOtTSFSXfvoWwdoSh9uz20HZq1g0fYLir2Dh/w6D/Msm8S1paxMbCwm5QuvYLHz4k6zlx4gSvvfYatra25MiRg3bt2hkDRmLzxPwCAwNZtWoVH374IRMnZvIfmn1G9erVefjwofEKRUK3c85sIiIiaNOmDb169UoyfEjmoisg6URXQEQkK9AVEBF5UekKSOahvxgiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2CiAiIiIiImI2+h2QdOKcPcbSJYiIJCkjPqtiYvT5JyKZnz6rMg/9DoiIiIiIiJiNumCJiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZKICIiIiIiIjZ/D/JFLESK4WkZgAAAABJRU5ErkJggg==",
      "text/html": [
       "\n",
       "            <div style=\"display: inline-block;\">\n",
       "                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
       "                    Figure\n",
       "                </div>\n",
       "                <img src='' width=800.0/>\n",
       "            </div>\n",
       "        "
      ],
      "text/plain": [
       "Canvas(footer_visible=False, header_visible=False, toolbar=Toolbar(toolitems=[('Home', 'Reset original view', …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.close('all') \n",
    "addpt = plt_one_addpt_onclick( x_train,y_train, w_in, b_in, logistic=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72310378",
   "metadata": {},
   "source": [
    "## Congratulations!\n",
    "You have explored the use of the sigmoid function in logistic regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "961d1b59",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
